<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.15"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>QuantumLibrary: /bb/mbigc/mbig5696/git/quantum_external/src/impl/quantum_context_impl.h Source File</title>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../resize.js"></script>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
  $(document).ready(initResizable);
/* @license-end */</script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">QuantumLibrary
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.15 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('../../',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('d1/d8f/quantum__context__impl_8h_source.html','../../');});
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">quantum_context_impl.h</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">** Copyright 2018 Bloomberg Finance L.P.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">**</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">** Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="comment">** you may not use this file except in compliance with the License.</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="comment">** You may obtain a copy of the License at</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="comment">**</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="comment">**     http://www.apache.org/licenses/LICENSE-2.0</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="comment">**</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="comment">** Unless required by applicable law or agreed to in writing, software</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="comment">** distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="comment">** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="comment">** See the License for the specific language governing permissions and</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="comment">** limitations under the License.</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="comment">//NOTE: DO NOT INCLUDE DIRECTLY</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="comment">//##############################################################################################</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="comment">//#################################### IMPLEMENTATIONS #########################################</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">//##############################################################################################</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;quantum/quantum_allocator.h&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="keyword">namespace </span><a class="code" href="../../d6/db9/namespaceBloomberg.html">Bloomberg</a> {</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span>quantum {</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="comment">//==============================================================================================</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="comment">//                       class IThreadContext (fwd to implementation)</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="comment">//==============================================================================================</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a8c969eafd7cdd1b694c33194a9dd7c09">   31</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a8c969eafd7cdd1b694c33194a9dd7c09">IThreadContext&lt;RET&gt;::get</a>()</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;{</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;get();</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;}</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a2eed7d5de4d43b5c5c214cb38b239acd">   38</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a>&amp; <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a2eed7d5de4d43b5c5c214cb38b239acd">IThreadContext&lt;RET&gt;::getRef</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getRef();</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;}</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a8d04a093d07bf66ead58603592295352">   45</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a8d04a093d07bf66ead58603592295352">IThreadContext&lt;RET&gt;::getAt</a>(<span class="keywordtype">int</span> num)</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;{</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template getAt&lt;OTHER_RET&gt;(num);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;}</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a5456b3de0627bee9695946acf745e195">   52</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a>&amp; <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a5456b3de0627bee9695946acf745e195">IThreadContext&lt;RET&gt;::getRefAt</a>(<span class="keywordtype">int</span> num)<span class="keyword"> const</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;template getRefAt&lt;OTHER_RET&gt;(num);</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;}</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a5612c3e719e8fe2104ada21a10767b4a">   59</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a5612c3e719e8fe2104ada21a10767b4a">IThreadContext&lt;RET&gt;::set</a>(V&amp;&amp; value)</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;{</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;set(std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#ab6e481262f106b0ed5fd5c0b86978c03">   66</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#ab6e481262f106b0ed5fd5c0b86978c03">IThreadContext&lt;RET&gt;::push</a>(V&amp;&amp; value)</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;{</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;push(std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;}</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a65ced94956cdfff4ad094897b14f8234">   73</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a3e3f89ff8206c0514976b423cb7199cd">BufferRetType&lt;V&gt;</a> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a65ced94956cdfff4ad094897b14f8234">IThreadContext&lt;RET&gt;::pull</a>(<span class="keywordtype">bool</span>&amp; isBufferClosed)</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;{</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;pull(isBufferClosed);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;}</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00080"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aef2bff661268949c9c598e0674ff7254">   80</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aef2bff661268949c9c598e0674ff7254">IThreadContext&lt;RET&gt;::closeBuffer</a>()</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;{</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;closeBuffer();</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;}</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a974f72467140b4d4047d8b76d2011703">   86</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a974f72467140b4d4047d8b76d2011703">IThreadContext&lt;RET&gt;::getNumCoroutineThreads</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getNumCoroutineThreads();</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;}</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aaf40c9f4c874571d103a2b40c2dbf554">   92</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aaf40c9f4c874571d103a2b40c2dbf554">IThreadContext&lt;RET&gt;::getNumIoThreads</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getNumIoThreads();</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;}</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a42ea867e65bc7e31a4373dc2142cef75">   98</a></span>&#160;<span class="keyword">const</span> std::pair&lt;int, int&gt;&amp; <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a42ea867e65bc7e31a4373dc2142cef75">IThreadContext&lt;RET&gt;::getCoroQueueIdRangeForAny</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getCoroQueueIdRangeForAny();</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;}</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160; </div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#aa26dcdfb6c3930c1cd2b4000d8711f4c">ThreadContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#adfefeb6cc6bcc74afea9c3d6080ac952">  106</a></span>&#160;<a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a7a6bbcc70d8d886864351513680ede87">IThreadContext&lt;RET&gt;::then</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template then&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;}</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#aa26dcdfb6c3930c1cd2b4000d8711f4c">ThreadContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a1a36a254b425ab7c584820580370bbab">  114</a></span>&#160;<a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aa911856faa7b71962984a101cfb59cf0">IThreadContext&lt;RET&gt;::onError</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;{</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template onError&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;}</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#aa26dcdfb6c3930c1cd2b4000d8711f4c">ThreadContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a442313a7564ebe7982a03737742fa8ea">  122</a></span>&#160;<a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#affbdb2bb8e1292cddd90684e4fa6d1f4">IThreadContext&lt;RET&gt;::finally</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;{</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template finally&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;}</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="keyword">typename</span> <a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a0b7724a925c43a5a9661e90f7f331651">IThreadContext&lt;RET&gt;::Ptr</a></div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a3a0a83b7941b8b0cf2c0a9ce6ec0f7ab">  129</a></span>&#160;<a class="code" href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a3a0a83b7941b8b0cf2c0a9ce6ec0f7ab">IThreadContext&lt;RET&gt;::end</a>()</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;end();</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;}</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;<span class="comment">//==============================================================================================</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;<span class="comment">//                       class ICoroContext (fwd to implementation)</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;<span class="comment">//==============================================================================================</span></div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a330754e60be65d5ee5f73793c7f86f69">  139</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a330754e60be65d5ee5f73793c7f86f69">ICoroContext&lt;RET&gt;::get</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;{</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;get(sync);</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;}</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a43cf7ed9f70bc0123547b6baa6ec7c49">  146</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a>&amp; <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a43cf7ed9f70bc0123547b6baa6ec7c49">ICoroContext&lt;RET&gt;::getRef</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getRef(sync);</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;}</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a141e79103170cb9cb0fb0197d8df61e5">  153</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a141e79103170cb9cb0fb0197d8df61e5">ICoroContext&lt;RET&gt;::getPrev</a>()</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;{</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    std::shared_ptr&lt;Impl&gt; ctx = static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;shared_from_this();</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="keywordflow">return</span> ctx-&gt;template getPrev&lt;OTHER_RET&gt;(ctx);</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;}</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7aeb2b66b620b208cde57129a9293ec3">  161</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a>&amp; <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7aeb2b66b620b208cde57129a9293ec3">ICoroContext&lt;RET&gt;::getPrevRef</a>()</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;{</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    std::shared_ptr&lt;Impl&gt; ctx = static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;shared_from_this();</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="keywordflow">return</span> ctx-&gt;template getPrevRef&lt;OTHER_RET&gt;(ctx);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;}</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a87a132655875ac6f07d5242e24d80a8d">  169</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a87a132655875ac6f07d5242e24d80a8d">ICoroContext&lt;RET&gt;::getAt</a>(<span class="keywordtype">int</span> num, <a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;{</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template getAt&lt;OTHER_RET&gt;(num, sync);</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;}</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a3c64853ee6c868f4e83668f17d4efd95">  176</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a>&amp; <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a3c64853ee6c868f4e83668f17d4efd95">ICoroContext&lt;RET&gt;::getRefAt</a>(<span class="keywordtype">int</span> num, <a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;template getRefAt&lt;OTHER_RET&gt;(num, sync);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;}</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a984eea6da10575adfba1a38d3b09ebd7">  183</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a984eea6da10575adfba1a38d3b09ebd7">ICoroContext&lt;RET&gt;::set</a>(V&amp;&amp; value)</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;{</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    std::shared_ptr&lt;Impl&gt; ctx = static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;shared_from_this();</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <span class="keywordflow">return</span> ctx-&gt;set(ctx, std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;}</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a18a76d5a8b8d68567bf706f468d69ea2">  191</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a18a76d5a8b8d68567bf706f468d69ea2">ICoroContext&lt;RET&gt;::push</a>(V&amp;&amp; value)</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;{</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    std::shared_ptr&lt;Impl&gt; ctx = static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;shared_from_this();</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;    ctx-&gt;push(ctx, std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;}</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a218dc6b764b01a685e37840a796fe0eb">  199</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a3e3f89ff8206c0514976b423cb7199cd">BufferRetType&lt;V&gt;</a> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a218dc6b764b01a685e37840a796fe0eb">ICoroContext&lt;RET&gt;::pull</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync, <span class="keywordtype">bool</span>&amp; isBufferClosed)</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;{</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;pull(sync, isBufferClosed);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;}</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7f2c171bda51b08ef7bf56f0d4aa5a90">  206</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7f2c171bda51b08ef7bf56f0d4aa5a90">ICoroContext&lt;RET&gt;::closeBuffer</a>()</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;{</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;closeBuffer();</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;}</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a0fadac955b2b32d87d1b8e505dce39c3">  212</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a0fadac955b2b32d87d1b8e505dce39c3">ICoroContext&lt;RET&gt;::getNumCoroutineThreads</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getNumCoroutineThreads();</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;}</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1efdbf7df3818aec9bc8fd98a5bfc640">  218</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1efdbf7df3818aec9bc8fd98a5bfc640">ICoroContext&lt;RET&gt;::getNumIoThreads</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getNumIoThreads();</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;}</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a9c60ca5034b9d1b19dd7279f3476bbec">  224</a></span>&#160;<span class="keyword">const</span> std::pair&lt;int, int&gt;&amp; <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a9c60ca5034b9d1b19dd7279f3476bbec">ICoroContext&lt;RET&gt;::getCoroQueueIdRangeForAny</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;const Impl*&gt;(<span class="keyword">this</span>)-&gt;getCoroQueueIdRangeForAny();</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;}</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7d0926e2c70ccc27b4234d9c966a4c48">  232</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7e16a0f4dda08ea619bbd3997f31a51e">ICoroContext&lt;RET&gt;::post</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;{</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template post&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;}</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a70d652e9a349be10d4f034bfd85701a6">  240</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7e16a0f4dda08ea619bbd3997f31a51e">ICoroContext&lt;RET&gt;::post</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template post&lt;OTHER_RET&gt;(queueId, isHighPriority, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;}</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a543d671426210cedd613440c4fde74d5">  248</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a4563ab7eb43249f2ad8677935b0b002c">ICoroContext&lt;RET&gt;::postFirst</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;{</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template postFirst&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;}</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ac0b1a065188c41efac3d1deed1357b89">  256</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a4563ab7eb43249f2ad8677935b0b002c">ICoroContext&lt;RET&gt;::postFirst</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;{</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template postFirst&lt;OTHER_RET&gt;(queueId, isHighPriority, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;}</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a8f79744d5e5f3d9460024877a0cd07a5">  264</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a122f96fbe956dcc2205564b1e953d8fc">ICoroContext&lt;RET&gt;::then</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;{</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template then&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;}</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1c1cf14d5eb019962a98578eacb5b8ed">  272</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#abc0fd314e1dbc93055a0107c390b8af9">ICoroContext&lt;RET&gt;::onError</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;{</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template onError&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;}</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#adb6fe33799ff3e9175ac7b5a9d3fcbf4">  280</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a315aa51f354c959bca0eaee24b90a26e">ICoroContext&lt;RET&gt;::finally</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;{</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template finally&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;}</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;<span class="keyword">typename</span> <a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#afda4bb817480a24960e407f6e977ed28">ICoroContext&lt;RET&gt;::Ptr</a></div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ab2530e5e0231aaba5a2f06315f713300">  287</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ab2530e5e0231aaba5a2f06315f713300">ICoroContext&lt;RET&gt;::end</a>()</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;end();</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;}</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a294434a555befbec5230f5ff03944878">CoroFuturePtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#aafa32c808db9c73262f5336b03f2055a">  295</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#aafa32c808db9c73262f5336b03f2055a">ICoroContext&lt;RET&gt;::postAsyncIo</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;{</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template postAsyncIo&lt;OTHER_RET&gt;(std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;}</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a294434a555befbec5230f5ff03944878">CoroFuturePtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a03a77b36de1443b63583e4217e33fb62">  303</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#aafa32c808db9c73262f5336b03f2055a">ICoroContext&lt;RET&gt;::postAsyncIo</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;{</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template postAsyncIo&lt;OTHER_RET&gt;(queueId, isHighPriority, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;}</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;</div><div class="line"><a name="l00311"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a67347c09d361d71b2e2b2b3b31f60202">  311</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1132ca05b44a667a1e3b1633e02a1b23">ICoroContext&lt;RET&gt;::forEach</a>(INPUT_IT first,</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;                           INPUT_IT last,</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;                           <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;{</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template forEach&lt;OTHER_RET&gt;(first, last, std::move(func));</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;}</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT&gt;</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;</div><div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a2f0df54e37ad9f6d8719ca56b5545e4a">  321</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1132ca05b44a667a1e3b1633e02a1b23">ICoroContext&lt;RET&gt;::forEach</a>(INPUT_IT first,</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;                           <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;                           <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;{</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template forEach&lt;OTHER_RET&gt;(first, num, std::move(func));</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;}</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::vector&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;&gt;</div><div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a73ec77ae4684f6ff01369199f15bf10f">  331</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ab7f82d2d74ac1840dbe1332898a86796">ICoroContext&lt;RET&gt;::forEachBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;                                INPUT_IT last,</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;                                <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;{</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template forEachBatch&lt;OTHER_RET&gt;(first, last, std::move(func));</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;}</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT&gt;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::vector&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;&gt;</div><div class="line"><a name="l00341"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a72e972a1d6e6f2d891f0300c32e13ff3">  341</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ab7f82d2d74ac1840dbe1332898a86796">ICoroContext&lt;RET&gt;::forEachBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;                                <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;                                <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;{</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template forEachBatch&lt;OTHER_RET&gt;(first, num, std::move(func));</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;}</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;</div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;          <span class="keyword">class </span>INPUT_IT,</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;          <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a946b3473429275faee4dc0a77ea7f9d6">  355</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a876d52748c66869620cdb9753783a86e">ICoroContext&lt;RET&gt;::mapReduce</a>(INPUT_IT first,</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;                             INPUT_IT last,</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;{</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template mapReduce&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;        (first, last, std::move(mapper), std::move(reducer));</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;}</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;          <span class="keyword">class </span>INPUT_IT&gt;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a18aa2559b6617f7f20eb19d7ede69f36">  370</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a876d52748c66869620cdb9753783a86e">ICoroContext&lt;RET&gt;::mapReduce</a>(INPUT_IT first,</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;                             <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;{</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template mapReduce&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        (first, num, std::move(mapper), std::move(reducer));</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;}</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;          <span class="keyword">class </span>INPUT_IT,</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;          <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00386"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#aebd9a82576780fcb50db98f1414e0a73">  386</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#afa8065d1270e5205c09720d1faf5307a">ICoroContext&lt;RET&gt;::mapReduceBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                                  INPUT_IT last,</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                                  <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;                                  <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;{</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template mapReduceBatch&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;        (first, last, std::move(mapper), std::move(reducer));</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;}</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;          <span class="keyword">class </span>INPUT_IT&gt;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">CoroContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00401"></a><span class="lineno"><a class="line" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a3868683cd9afc1b37d7c5bdb213bdda7">  401</a></span>&#160;<a class="code" href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#afa8065d1270e5205c09720d1faf5307a">ICoroContext&lt;RET&gt;::mapReduceBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;                                  <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;                                  <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;                                  <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;{</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    <span class="keywordflow">return</span> static_cast&lt;Impl*&gt;(<span class="keyword">this</span>)-&gt;template mapReduceBatch&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;        (first, num, std::move(mapper), std::move(reducer));</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;}</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;<span class="comment">//==============================================================================================</span></div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;<span class="comment">//                                     class Context</span></div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;<span class="comment">//==============================================================================================</span></div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;<span class="preprocessor">#ifndef __QUANTUM_CONTEXT_ALLOC_SIZE</span></div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;<span class="preprocessor">    #define __QUANTUM_CONTEXT_ALLOC_SIZE __QUANTUM_DEFAULT_POOL_ALLOC_SIZE</span></div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;<span class="preprocessor">#ifndef __QUANTUM_USE_DEFAULT_ALLOCATOR</span></div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;<span class="preprocessor">    #ifdef __QUANTUM_ALLOCATE_POOL_FROM_HEAP</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;        <span class="keyword">using</span> <a class="code" href="../../d0/d75/structBloomberg_1_1quantum_1_1StackAllocator.html">ContextAllocator</a> = <a class="code" href="../../d2/da6/structBloomberg_1_1quantum_1_1HeapAllocator.html">HeapAllocator&lt;Context&lt;int&gt;</a>&gt;;</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;<span class="preprocessor">    #else</span></div><div class="line"><a name="l00420"></a><span class="lineno"><a class="line" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a4c489223386c94e8f0841e2688cca80e">  420</a></span>&#160;        <span class="keyword">using</span> <a class="code" href="../../d0/d75/structBloomberg_1_1quantum_1_1StackAllocator.html">ContextAllocator</a> = <a class="code" href="../../d0/d75/structBloomberg_1_1quantum_1_1StackAllocator.html">StackAllocator&lt;Context&lt;int&gt;</a>, __QUANTUM_CONTEXT_ALLOC_SIZE&gt;;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;<span class="preprocessor">    #endif</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="keyword">using</span> <a class="code" href="../../d0/d75/structBloomberg_1_1quantum_1_1StackAllocator.html">ContextAllocator</a> = <a class="code" href="../../d7/dd7/structBloomberg_1_1quantum_1_1StlAllocator.html">StlAllocator&lt;Context&lt;int&gt;</a>&gt;;</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a655724ff396688037fb9bef66afc3f4e">Context&lt;RET&gt;::Context</a>(<a class="code" href="../../da/daa/classBloomberg_1_1quantum_1_1DispatcherCore.html">DispatcherCore</a>&amp; dispatcher) :</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    _promises(1, <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#afdd6d891441a24d705b1c015beb9ad3c">PromisePtr</a>&lt;RET&gt;(new <a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise</a>&lt;RET&gt;(), <a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise</a>&lt;RET&gt;::deleter)),</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    _dispatcher(&amp;dispatcher),</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    _terminated ATOMIC_FLAG_INIT,</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    _signal(-1),</div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    _yield(nullptr),</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    _sleepDuration(0)</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;{}</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;Context&lt;RET&gt;::Context(Context&lt;OTHER_RET&gt;&amp; other) :</div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    _promises(other._promises),</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    _dispatcher(other._dispatcher),</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    _terminated ATOMIC_FLAG_INIT,</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;    _signal(-1),</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;    _yield(nullptr),</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    _sleepDuration(0)</div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;{</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    _promises.emplace_back(PromisePtr&lt;RET&gt;(<span class="keyword">new</span> Promise&lt;RET&gt;(), <a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html#a2cba4d0efb0eb09be81f033b5550418d">Promise&lt;RET&gt;::deleter</a>)); <span class="comment">//append a new promise</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;}</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00450"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a27f69b3023acdc46fc3145db80ea1b68">  450</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::~Context</a>()</div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;{</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    terminate();</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;}</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a8bac8f4101d8469756bb27b1c0b7f9dc">  456</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::terminate</a>()</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;{</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;    <span class="keywordflow">if</span> (!_terminated.test_and_set())</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    {</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        _promises.back()-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a8bac8f4101d8469756bb27b1c0b7f9dc">terminate</a>();</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;        </div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;        <span class="comment">//unlink task ptr</span></div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;        _task.reset();</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    }</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;}</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ab23416d558addcca3ba223c3ff689672">  468</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::validAt</a>(<span class="keywordtype">int</span> num)<span class="keyword"> const</span></div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    <span class="keywordflow">return</span> _promises[index(num)]-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#aef705383af39db02acc63c0dd8e4a321">valid</a>();</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;}</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#aef705383af39db02acc63c0dd8e4a321">  474</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::valid</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <span class="keywordflow">return</span> validAt(-1);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;}</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a5a71ccef08af22fdde662e7df560dccb">  480</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::setException</a>(std::exception_ptr ex)</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    <span class="keywordflow">return</span> _promises.back()-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a5a71ccef08af22fdde662e7df560dccb">setException</a>(ex);</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;}</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a8db6bb1798fc7c74534648e2091ad5be">  486</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::isBlocked</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    <span class="keywordflow">return</span> _signal == 0;</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;}</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#addfd8c1fdeb5ca8594a2af08dd74c7ca">  492</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::isSleeping</a>(<span class="keywordtype">bool</span> updateTimer)</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;{</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <span class="keywordflow">if</span> (_sleepDuration.count() &gt; 0) {</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;        <span class="keywordflow">if</span> (!updateTimer) {</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;        }</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;        <span class="keyword">auto</span> now = std::chrono::high_resolution_clock::now();</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;        <span class="keyword">auto</span> elapsed = std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(now-_sleepTimestamp);</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;        <span class="keywordflow">if</span> (elapsed &gt;= _sleepDuration) {</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;            <span class="comment">//expired so we reset all values</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;            _sleepDuration = std::chrono::microseconds(0);</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;            _sleepTimestamp = std::chrono::high_resolution_clock::time_point{};</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;        }</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;        <span class="keywordflow">else</span> {</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;            <span class="comment">//reduce duration and save new timestamp</span></div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;            _sleepDuration -= elapsed;</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;            _sleepTimestamp = now;</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;        }</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    }</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;}</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::index</a>(<span class="keywordtype">int</span> num)<span class="keyword"> const</span></div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    <span class="keywordflow">if</span> ((num &lt; -1) || (num &gt;= (<span class="keywordtype">int</span>)_promises.size()))</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;    {</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;        <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a4206774a667bbdbc8c8cc1fd905e051c">ThrowFutureException</a>(FutureState::NoState);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    }</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    <span class="keywordflow">return</span> (num == -1) ? _promises.size() - 1 : num;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;}</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;<span class="keywordtype">void</span> Context&lt;RET&gt;::validateTaskType(ITask::Type type)<span class="keyword"> const</span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    <span class="keywordflow">if</span> (!_task)</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    {</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Invalid task pointer&quot;</span>);</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    }</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    </div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <span class="keywordtype">bool</span> isValid = <span class="keyword">true</span>;</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    <span class="keywordflow">switch</span> (type)</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    {</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;        <span class="keywordflow">case</span> ITask::Type::Continuation:</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;        <span class="keywordflow">case</span> ITask::Type::ErrorHandler:</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;            <span class="keywordflow">if</span> ((_task-&gt;getType() != ITask::Type::First) &amp;&amp;</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;                (_task-&gt;getType() != ITask::Type::Continuation))</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;            {</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;                isValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;            }</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;        <span class="keywordflow">case</span> ITask::Type::Final:</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;            <span class="keywordflow">if</span> ((_task-&gt;getType() != ITask::Type::First) &amp;&amp;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;                (_task-&gt;getType() != ITask::Type::Continuation) &amp;&amp;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;                (_task-&gt;getType() != ITask::Type::ErrorHandler))</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;            {</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;                isValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;            }</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;        <span class="keywordflow">case</span> ITask::Type::Termination:</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;            <span class="keywordflow">if</span> ((_task-&gt;getType() != ITask::Type::First) &amp;&amp;</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;                (_task-&gt;getType() != ITask::Type::Continuation) &amp;&amp;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;                (_task-&gt;getType() != ITask::Type::ErrorHandler) &amp;&amp;</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;                (_task-&gt;getType() != ITask::Type::Final))</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;            {</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;                isValid = <span class="keyword">false</span>;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;            }</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;        <span class="keywordflow">default</span>:</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    }</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    </div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keywordflow">if</span> (!isValid)</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    {</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Restricted continuation method&quot;</span>);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    }</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;}</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;<span class="keywordtype">void</span> Context&lt;RET&gt;::validateContext(ICoroSync::Ptr sync)<span class="keyword"> const</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keywordflow">if</span> (static_cast&lt;const ICoroSync*&gt;(<span class="keyword">this</span>) == sync.get())</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    {</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Must use different synchronization object&quot;</span>);</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    }</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;}</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ae5a828ab3f18b336f310191e04bae154">  581</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::setTask</a>(<a class="code" href="../../df/daf/structBloomberg_1_1quantum_1_1ITask.html#a6c5b8216547b11f3f0e0e6bc7d20956d">ITask::Ptr</a> task)</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;{</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    _task = task;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;}</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a71819413eb6ab86661343d31e5ba9acb">  587</a></span>&#160;<a class="code" href="../../df/daf/structBloomberg_1_1quantum_1_1ITask.html#a6c5b8216547b11f3f0e0e6bc7d20956d">ITask::Ptr</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getTask</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    <span class="keywordflow">return</span> _task;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;}</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00593"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#aeae6afb073e6d92f06c17c6d8f2048ff">  593</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::setYieldHandle</a>(<a class="code" href="../../d6/d86/structBloomberg_1_1quantum_1_1Traits.html#a2730a4e218f1af1a4e3f64e80ed7bbfc">Traits::Yield</a>&amp; yield)</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;{</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    _yield = &amp;yield;</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;}</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a844be164636c0bd4a97c8a60aadb9316">  599</a></span>&#160;<a class="code" href="../../d6/d86/structBloomberg_1_1quantum_1_1Traits.html#a2730a4e218f1af1a4e3f64e80ed7bbfc">Traits::Yield</a>&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getYieldHandle</a>()</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;{</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="keywordflow">if</span> (!_yield) <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Yield handle is null&quot;</span>);</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="keywordflow">return</span> *_yield;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;}</div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00606"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a83acb42a49d715661b7489479a2cbd53">  606</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::yield</a>()</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;{</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    getYieldHandle()();</div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;}</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a74f3e3b2e513eaf80caa486d23151a61">  612</a></span>&#160;std::atomic_int&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::signal</a>()</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;{</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="keywordflow">return</span> _signal;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;}</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#adc7018b34b69e8283395b1bfd0e70883">  618</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::sleep</a>(<span class="keyword">const</span> std::chrono::milliseconds&amp; timeMs)</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;{</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;    sleep(std::chrono::duration_cast&lt;std::chrono::microseconds&gt;(timeMs));</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;}</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ad5bfae92ce436626faa71c7a49e6cdf3">  624</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::sleep</a>(<span class="keyword">const</span> std::chrono::microseconds&amp; timeUs)</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;{</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;    _sleepDuration = timeUs;</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;    _sleepTimestamp = std::chrono::high_resolution_clock::now();</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;    <span class="keywordflow">if</span> (isSleeping()) {</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;        yield();</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;    }</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;}</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a47fb7062cda1aca965647f86b1c334d0">  636</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::thenImpl</a>(<a class="code" href="../../df/daf/structBloomberg_1_1quantum_1_1ITask.html#ae01baba509e1529f4f89e01d9c19fa14">ITask::Type</a> type, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;{</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="keyword">auto</span> ctx = <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a>(<span class="keyword">new</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;OTHER_RET&gt;</a>(*<span class="keyword">this</span>),</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;                                     <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;OTHER_RET&gt;::deleter</a>);</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    <span class="keyword">auto</span> task = <a class="code" href="../../d0/d90/classBloomberg_1_1quantum_1_1Task.html#a2d6e0bcef2e9f07d966c9734f92f4969">Task::Ptr</a>(<span class="keyword">new</span> <a class="code" href="../../d0/d90/classBloomberg_1_1quantum_1_1Task.html">Task</a>(ctx,</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;                                   _task-&gt;getQueueId(),      <span class="comment">//keep current queueId</span></div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;                                   _task-&gt;isHighPriority(),  <span class="comment">//keep current priority</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;                                   type,</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;                                   std::forward&lt;FUNC&gt;(func),</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;                                   std::forward&lt;ARGS&gt;(args)...),</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;                          Task::deleter);</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    ctx-&gt;setTask(task);</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    </div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <span class="comment">//Chain tasks</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    std::static_pointer_cast&lt;ITaskContinuation&gt;(_task)-&gt;setNextTask(task);</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;    task-&gt;setPrevTask(std::static_pointer_cast&lt;ITaskContinuation&gt;(_task));</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    <span class="keywordflow">return</span> ctx;</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;}</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a1848dc5d7547ba112a44721951603669">  658</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::then</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;{</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    <span class="comment">//Previous task must either be First or Continuation types</span></div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    validateTaskType(ITask::Type::Continuation);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    <span class="keywordflow">return</span> thenImpl&lt;OTHER_RET, FUNC, ARGS...&gt;(ITask::Type::Continuation, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;}</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00668"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a311a7045f6c47e5aba887d109bb08a20">  668</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::onError</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;{</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    validateTaskType(ITask::Type::ErrorHandler);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;    <span class="keywordflow">return</span> thenImpl&lt;OTHER_RET, FUNC, ARGS...&gt;(ITask::Type::ErrorHandler, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;}</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00677"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ad6ad88afbd04d2ff1d325ec3f785af98">  677</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::finally</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;{</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;    validateTaskType(ITask::Type::Final);</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    <span class="keywordflow">return</span> thenImpl&lt;OTHER_RET, FUNC, ARGS...&gt;(ITask::Type::Final, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;}</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;<span class="keyword">typename</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a93fbe0e7fa77b4b98f35ee2935dfaa83">Context&lt;RET&gt;::Ptr</a></div><div class="line"><a name="l00685"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a671d7fb7fb234086b568a101dde84b0b">  685</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::end</a>()</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;{</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;    validateTaskType(ITask::Type::Termination);</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <span class="comment">//Async post to next available queue since the previous task in the chain already terminated</span></div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <span class="keyword">auto</span> task = std::static_pointer_cast&lt;Task&gt;(std::static_pointer_cast&lt;ITaskContinuation&gt;(getTask())-&gt;getFirstTask());</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    _dispatcher-&gt;post(task);</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">dynamic_cast&lt;</span><a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;</a>*<span class="keyword">&gt;</span>(<span class="keyword">this</span>)-&gt;shared_from_this();</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;}</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a294434a555befbec5230f5ff03944878">CoroFuturePtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a18431eacd784c497f727852c508597b5">  697</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::postAsyncIo</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;{</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    <span class="keywordflow">return</span> postAsyncIoImpl&lt;OTHER_RET&gt;((<span class="keywordtype">int</span>)IQueue::QueueId::Any, <span class="keyword">false</span>, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;}</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a294434a555befbec5230f5ff03944878">CoroFuturePtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a0559064ed7daf706dde029b2c23272d3">  705</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::postAsyncIo</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;{</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    <span class="keywordflow">return</span> postAsyncIoImpl&lt;OTHER_RET&gt;(queueId, isHighPriority, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;}</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a294434a555befbec5230f5ff03944878">CoroFuturePtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::postAsyncIoImpl</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;{</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    <span class="keywordflow">if</span> (queueId &lt; (<span class="keywordtype">int</span>)IQueue::QueueId::Any)</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;    {</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Invalid coroutine queue id&quot;</span>);</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    }</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="keyword">auto</span> promise = PromisePtr&lt;OTHER_RET&gt;(<span class="keyword">new</span> Promise&lt;OTHER_RET&gt;(), Promise&lt;OTHER_RET&gt;::deleter);</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    <span class="keyword">auto</span> task = IoTask::Ptr(<span class="keyword">new</span> IoTask(promise,</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;                                       queueId,</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;                                       isHighPriority,</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;                                       std::forward&lt;FUNC&gt;(func),</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;                                       std::forward&lt;ARGS&gt;(args)...),</div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;                            IoTask::deleter);</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;    _dispatcher-&gt;postAsyncIo(task);</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;    <span class="keywordflow">return</span> promise-&gt;getICoroFuture();</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;}</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;ContextPtr&lt;std::vector&lt;OTHER_RET&gt;&gt;</div><div class="line"><a name="l00733"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a72fde2c2c762191ad18a47da842bafbd">  733</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::forEach</a>(INPUT_IT first,</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;                      INPUT_IT last,</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;                      <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;{</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;    <span class="keywordflow">return</span> forEach&lt;OTHER_RET&gt;(first, std::distance(first, last), std::move(func));</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;}</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT&gt;</div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;</div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a92e31d0c16163a70fa6835d0d894488b">  743</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::forEach</a>(INPUT_IT first,</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;                      <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;                      <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;{</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    <span class="keywordflow">return</span> post&lt;std::vector&lt;OTHER_RET&gt;&gt;(Util::forEachCoro&lt;OTHER_RET, INPUT_IT&gt;,</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;                                        INPUT_IT{first},</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;                                        <span class="keywordtype">size_t</span>{num},</div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;                                        <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a>{std::move(func)});</div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;}</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::vector&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;&gt;</div><div class="line"><a name="l00756"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a77a8b62a0cc3c43ebb522b36c9f4feae">  756</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::forEachBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;                           INPUT_IT last,</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;                           <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;{</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;    <span class="keywordflow">return</span> forEachBatch&lt;OTHER_RET&gt;(first, std::distance(first, last), std::move(func));</div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;}</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET, <span class="keyword">class</span> INPUT_IT&gt;</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::vector&lt;std::vector&lt;OTHER_RET&gt;</a>&gt;&gt;</div><div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a11662c98402c70d00fe38c443537ba55">  766</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::forEachBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;                           <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;                           <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a> func)</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;{</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    <span class="keywordflow">return</span> post&lt;std::vector&lt;std::vector&lt;OTHER_RET&gt;&gt;&gt;(Util::forEachBatchCoro&lt;OTHER_RET, INPUT_IT&gt;,</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;                                                     INPUT_IT{first},</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                                                     <span class="keywordtype">size_t</span>{num},</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;                                                     <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Functions::ForEachFunc&lt;OTHER_RET, INPUT_IT&gt;</a>{std::move(func)},</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;                                                     getNumCoroutineThreads());</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;}</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;          <span class="keyword">class </span>INPUT_IT,</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;          <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00784"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a7121593247706c863a13f75de3a87e2c">  784</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::mapReduce</a>(INPUT_IT first,</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;                        INPUT_IT last,</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;                        <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;                        <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;{</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="keywordflow">return</span> mapReduce(first, std::distance(first, last), std::move(mapper), std::move(reducer));</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;}</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;          <span class="keyword">class </span>INPUT_IT&gt;</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a89aa2e2af2ef2105e2933d13370c9705">  798</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::mapReduce</a>(INPUT_IT first,</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;                        <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;                        <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;                        <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;{</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;    <span class="keyword">using</span> ReducerOutput = std::map&lt;KEY, REDUCED_TYPE&gt;;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    <span class="keywordflow">return</span> post&lt;ReducerOutput&gt;(Util::mapReduceCoro&lt;KEY, MAPPED_TYPE, REDUCED_TYPE, INPUT_IT&gt;,</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;                               INPUT_IT{first},</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;                               <span class="keywordtype">size_t</span>{num},</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;                               <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a>{std::move(mapper)},</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;                               <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a>{std::move(reducer)});</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;}</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;          <span class="keyword">class </span>INPUT_IT,</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;          <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#afa84de805a985c05658303b8ae313b50">  818</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::mapReduceBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;                             INPUT_IT last,</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;{</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <span class="keywordflow">return</span> mapReduceBatch(first, std::distance(first, last), std::move(mapper), std::move(reducer));</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;}</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>KEY,</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;          <span class="keyword">class </span>MAPPED_TYPE,</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;          <span class="keyword">class </span>REDUCED_TYPE,</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;          <span class="keyword">class </span>INPUT_IT&gt;</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;std::map&lt;KEY, REDUCED_TYPE&gt;</a>&gt;</div><div class="line"><a name="l00832"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a2b14b52e110fcc608b64ba6323c32859">  832</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::mapReduceBatch</a>(INPUT_IT first,</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;                             <span class="keywordtype">size_t</span> num,</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a> mapper,</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;                             <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a> reducer)</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;{</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    <span class="keyword">using</span> ReducerOutput = std::map&lt;KEY, REDUCED_TYPE&gt;;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <span class="keywordflow">return</span> post&lt;ReducerOutput&gt;(Util::mapReduceBatchCoro&lt;KEY, MAPPED_TYPE, REDUCED_TYPE, INPUT_IT&gt;,</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;                               INPUT_IT{first},</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;                               <span class="keywordtype">size_t</span>{num},</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;                               <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Functions::MapFunc&lt;KEY, MAPPED_TYPE, INPUT_IT&gt;</a>{std::move(mapper)},</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;                               <a class="code" href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Functions::ReduceFunc&lt;KEY, MAPPED_TYPE, REDUCED_TYPE&gt;</a>{std::move(reducer)});</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;}</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00847"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#aaf24cac3dcdf0bf21b7301e606fa4d1a">  847</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::set</a>(V&amp;&amp; value)</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;{</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;set(std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;}</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00854"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a6cc68322709515d1586cf453276f2100">  854</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::push</a>(V&amp;&amp; value)</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;{</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;push(std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;}</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00861"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a38c0b6b66c3b64263ebfa5c512be2f79">  861</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::push</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync, V&amp;&amp; value)</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;{</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;push(sync, std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;}</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;</div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a92e7d6dac6001c2f0fd9da6934e81440">  868</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a3e3f89ff8206c0514976b423cb7199cd">BufferRetType&lt;V&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::pull</a>(<span class="keywordtype">bool</span>&amp; isBufferClosed)</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;{</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;getIThreadFuture()-&gt;pull(isBufferClosed);</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;}</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ae946ad090fec1eb3ab2b37b7d958225d">  875</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a3e3f89ff8206c0514976b423cb7199cd">BufferRetType&lt;V&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::pull</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync, <span class="keywordtype">bool</span>&amp; isBufferClosed)</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;{</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;getICoroFuture()-&gt;pull(sync, isBufferClosed);</div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;}</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a60c1b4501689af034dfcb9c284b8286e">  882</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::closeBuffer</a>()</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;{</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;closeBuffer();</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;}</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00889"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ac90b19af9520df4882b8d1f9a0f9ad0c">  889</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getAt</a>(<span class="keywordtype">int</span> num)</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;{</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;OTHER_RET&gt;</a>&gt;(_promises[index(num)])-&gt;getIThreadFuture()-&gt;get();</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;}</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00896"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a3f03e8a60cefa9aed0d9de63fcc63452">  896</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a>&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getRefAt</a>(<span class="keywordtype">int</span> num)<span class="keyword"> const</span></div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;OTHER_RET&gt;</a>&gt;(_promises[index(num)])-&gt;getIThreadFuture()-&gt;getRef();</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;}</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00903"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a9f6d2ba69b3d5553fd009bb7cd6d507b">  903</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::get</a>()</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;{</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;    <span class="keywordflow">return</span> getAt&lt;RET&gt;(-1);</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;}</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#afc148b852493915dfa3925f4d8ca80e4">  910</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a>&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getRef</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;    <span class="keywordflow">return</span> getRefAt&lt;RET&gt;(-1);</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;}</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00916"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ac89818fc8478508cad80c6cdb833e2dd">  916</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitAt</a>(<span class="keywordtype">int</span> num)<span class="keyword"> const</span></div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;    _promises[index(num)]-&gt;getIThreadFutureBase()-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a084c691c4873a2dd206b05ecd3e5dd34">wait</a>();</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;}</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a13a7039dd07811ced226e5adc29d6819">  922</a></span>&#160;std::future_status <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitForAt</a>(<span class="keywordtype">int</span> num, std::chrono::milliseconds timeMs)<span class="keyword"> const</span></div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    <span class="keywordflow">return</span> _promises[index(num)]-&gt;getIThreadFutureBase()-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a3472f64cc9dd65b058f8fcbabc4e3d02">waitFor</a>(timeMs);</div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;}</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00928"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a084c691c4873a2dd206b05ecd3e5dd34">  928</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::wait</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    waitAt(-1);</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;}</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00934"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a3472f64cc9dd65b058f8fcbabc4e3d02">  934</a></span>&#160;std::future_status <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitFor</a>(std::chrono::milliseconds timeMs)<span class="keyword"> const</span></div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    <span class="keywordflow">return</span> waitForAt(-1, timeMs);</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;}</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00940"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a945677eefa8942162876ddc8a96e2a3f">  940</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitAll</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; promise : _promises)</div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    {</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;        <span class="keywordflow">try</span></div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;        {</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;            promise-&gt;getIThreadFutureBase()-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a084c691c4873a2dd206b05ecd3e5dd34">wait</a>();</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;        }</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;        <span class="keywordflow">catch</span>(...) <span class="comment">//catch all broken promises or any other exception</span></div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;        {}</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    }</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;}</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno">  953</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V, <span class="keyword">class</span>&gt;</div><div class="line"><a name="l00955"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#aef88ac81d0b8a34e2d73ba203b0deec1">  955</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::set</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync, V&amp;&amp; value)</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;{</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;RET&gt;</a>&gt;(_promises.back())-&gt;set(sync, std::forward&lt;V&gt;(value));</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;}</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00962"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ad2e8e50aaf33e2f10b8343ff6f8bd7cb">  962</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getAt</a>(<span class="keywordtype">int</span> num,</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;                                        <a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;{</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    validateContext(sync);</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;OTHER_RET&gt;</a>&gt;(_promises[index(num)])-&gt;getICoroFuture()-&gt;get(sync);</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;}</div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00971"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a8aadfc75a4cd426986fb008af86ed6f9">  971</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a>&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getRefAt</a>(<span class="keywordtype">int</span> num,</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;                                                  <a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    validateContext(sync);</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;OTHER_RET&gt;</a>&gt;(_promises[index(num)])-&gt;getICoroFuture()-&gt;getRef(sync);</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;}</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00980"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ad30a62675d2c29f3f62780cadbed8d0a">  980</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::get</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;{</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    <span class="keywordflow">return</span> getAt&lt;RET&gt;(-1, sync);</div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;}</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> V&gt;</div><div class="line"><a name="l00987"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ae31a1b88bfd1fb6afcd8ccb8b2921d97">  987</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;V&gt;</a>&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getRef</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    <span class="keywordflow">return</span> getRefAt&lt;RET&gt;(-1, sync);</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;}</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l00994"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ab37184c0fbeb026630cbc4949b7d0670">  994</a></span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getPrev</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;{</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    <span class="keywordflow">if</span> (_promises.size() &lt; 2)</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;    {</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;        <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a4206774a667bbdbc8c8cc1fd905e051c">ThrowFutureException</a>(FutureState::NoState);</div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    }</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;OTHER_RET&gt;</a>&gt;(_promises[index(_promises.size()-2)])-&gt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html#a774002dc514111f16e550f584dd32f95">getICoroFuture</a>()-&gt;get(sync);</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;}</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> OTHER_RET&gt;</div><div class="line"><a name="l01005"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a6af8edb619ffe7d187598e874a4c20f2"> 1005</a></span>&#160;<span class="keyword">const</span> <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">NonBufferRetType&lt;OTHER_RET&gt;</a>&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getPrevRef</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;{</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;    <span class="keywordflow">if</span> (_promises.size() &lt; 2)</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;    {</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;        <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a4206774a667bbdbc8c8cc1fd905e051c">ThrowFutureException</a>(FutureState::NoState);</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    }</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    <span class="keywordflow">return</span> std::static_pointer_cast&lt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Promise&lt;OTHER_RET&gt;</a>&gt;(_promises[index(_promises.size()-2)])-&gt;<a class="code" href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html#a774002dc514111f16e550f584dd32f95">getICoroFuture</a>()-&gt;getRef(sync);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;}</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01015"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a66b2fe051e1b72e6a045cb0a3e57b9d2"> 1015</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getNumCoroutineThreads</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    <span class="keywordflow">return</span> _dispatcher-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a66b2fe051e1b72e6a045cb0a3e57b9d2">getNumCoroutineThreads</a>();</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;}</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01021"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a5855eee0ab54a2d606cdc96196816a74"> 1021</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getNumIoThreads</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    <span class="keywordflow">return</span> _dispatcher-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a5855eee0ab54a2d606cdc96196816a74">getNumIoThreads</a>();</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;}</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01027"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a70e2d72600c412fdeca447b9b111991c"> 1027</a></span>&#160;<span class="keyword">const</span> std::pair&lt;int, int&gt;&amp; <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::getCoroQueueIdRangeForAny</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;    <span class="keywordflow">return</span> _dispatcher-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a70e2d72600c412fdeca447b9b111991c">getCoroQueueIdRangeForAny</a>();</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;}</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01033"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a45b5235e7557b88a9b044ed030ff95fd"> 1033</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitAt</a>(<span class="keywordtype">int</span> num,</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;                          <a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    validateContext(sync);</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;    _promises[index(num)]-&gt;getICoroFutureBase()-&gt;wait(sync);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;}</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01041"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#ac1fecdd49135f75ed831a4bb2c327624"> 1041</a></span>&#160;std::future_status <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitForAt</a>(<span class="keywordtype">int</span> num,</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;                                           <a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync,</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;                                           std::chrono::milliseconds timeMs)<span class="keyword"> const</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;    validateContext(sync);</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    <span class="keywordflow">return</span> _promises[index(num)]-&gt;getICoroFutureBase()-&gt;waitFor(sync, timeMs);</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;}</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01050"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a2582bc9f706d742f3473de0f02ff026f"> 1050</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::wait</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    waitAt(-1, sync);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;}</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01056"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a39fb2f29e07cd1d5dc185370166605f2"> 1056</a></span>&#160;std::future_status <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitFor</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync,</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;                                         std::chrono::milliseconds timeMs)<span class="keyword"> const</span></div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    <span class="keywordflow">return</span> waitForAt(-1, sync, timeMs);</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;}</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a06361967cff0da813090d5d19816141b"> 1063</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::waitAll</a>(<a class="code" href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">ICoroSync::Ptr</a> sync)<span class="keyword"> const</span></div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp;&amp; promise : _promises)</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    {</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;        <span class="keywordflow">try</span></div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;        {</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;            promise-&gt;getICoroFutureBase()-&gt;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a084c691c4873a2dd206b05ecd3e5dd34">wait</a>(sync);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;        }</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;        <span class="keywordflow">catch</span>(...) <span class="comment">//catch all broken promises or any other exception</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;        {</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;        }</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    }</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;}</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l01080"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a565e441cfddcbb984ce5fa22f3dbcff8"> 1080</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::post</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;{</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;    <span class="keywordflow">return</span> postImpl&lt;OTHER_RET&gt;((<span class="keywordtype">int</span>)IQueue::QueueId::Any, <span class="keyword">false</span>, ITask::Type::Standalone, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;}</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l01088"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a730c6f56d768eef190f1b1da2555ef00"> 1088</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::post</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;{</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;    <span class="keywordflow">return</span> postImpl&lt;OTHER_RET&gt;(queueId, isHighPriority, ITask::Type::Standalone, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;}</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l01096"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#add67969159e847e044800e7f48777534"> 1096</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::postFirst</a>(FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;{</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;    <span class="keywordflow">return</span> postImpl&lt;OTHER_RET&gt;((<span class="keywordtype">int</span>)IQueue::QueueId::Any, <span class="keyword">false</span>, ITask::Type::First, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;}</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l01104"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a3b509b33a26d72ff2e8e9884dfba84e5"> 1104</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::postFirst</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;{</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    <span class="keywordflow">return</span> postImpl&lt;OTHER_RET&gt;(queueId, isHighPriority, ITask::Type::First, std::forward&lt;FUNC&gt;(func), std::forward&lt;ARGS&gt;(args)...);</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;}</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class </span>OTHER_RET, <span class="keyword">class </span>FUNC, <span class="keyword">class </span>... ARGS&gt;</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;<a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a></div><div class="line"><a name="l01112"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a244e5fc4adaabf4cbf383ccffbbafe2d"> 1112</a></span>&#160;<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::postImpl</a>(<span class="keywordtype">int</span> queueId, <span class="keywordtype">bool</span> isHighPriority, <a class="code" href="../../df/daf/structBloomberg_1_1quantum_1_1ITask.html#ae01baba509e1529f4f89e01d9c19fa14">ITask::Type</a> type, FUNC&amp;&amp; func, ARGS&amp;&amp;... args)</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;{</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;    <span class="keywordflow">if</span> (queueId &lt; (<span class="keywordtype">int</span>)IQueue::QueueId::Same)</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;    {</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;        <span class="keywordflow">throw</span> std::runtime_error(<span class="stringliteral">&quot;Invalid coroutine queue id&quot;</span>);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    <span class="keyword">auto</span> ctx = <a class="code" href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">ContextPtr&lt;OTHER_RET&gt;</a>(<span class="keyword">new</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;OTHER_RET&gt;</a>(*_dispatcher),</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;                                     <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;OTHER_RET&gt;::deleter</a>);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    <span class="keyword">auto</span> task = <a class="code" href="../../d0/d90/classBloomberg_1_1quantum_1_1Task.html#a2d6e0bcef2e9f07d966c9734f92f4969">Task::Ptr</a>(<span class="keyword">new</span> <a class="code" href="../../d0/d90/classBloomberg_1_1quantum_1_1Task.html">Task</a>(ctx,</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;                                   (queueId == (<span class="keywordtype">int</span>)IQueue::QueueId::Same) ? _task-&gt;getQueueId() : queueId,</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;                                   isHighPriority,</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;                                   type,</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;                                   std::forward&lt;FUNC&gt;(func),</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;                                   std::forward&lt;ARGS&gt;(args)...),</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;                          Task::deleter);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;    ctx-&gt;setTask(task);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;    <span class="keywordflow">if</span> (type == ITask::Type::Standalone)</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    {</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;        _dispatcher-&gt;post(task);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;    }</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    <span class="keywordflow">return</span> ctx;</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;}</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01136"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a87ea6759921b56fb473321343d84dcaf"> 1136</a></span>&#160;<span class="keywordtype">void</span>* <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::operator</a> <span class="keyword">new</span>(size_t)</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;{</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="../../d7/df5/structBloomberg_1_1quantum_1_1Allocator.html">Allocator&lt;ContextAllocator&gt;::instance</a>(AllocatorTraits::contextAllocSize()).allocate();</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;}</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01142"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a7efde02f26da270afeda21feed9790c8"> 1142</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::operator</a> <span class="keyword">delete</span>(<span class="keywordtype">void</span>* p)</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;{</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    <a class="code" href="../../d7/df5/structBloomberg_1_1quantum_1_1Allocator.html">Allocator&lt;ContextAllocator&gt;::instance</a>(AllocatorTraits::contextAllocSize()).deallocate(<span class="keyword">static_cast&lt;</span><a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;int&gt;</a>*<span class="keyword">&gt;</span>(p));</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;}</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">class</span> RET&gt;</div><div class="line"><a name="l01148"></a><span class="lineno"><a class="line" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#adfe001a8f4c433d80ee93e1bdcd1a8ac"> 1148</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;::deleter</a>(<a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;RET&gt;</a>* p)</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;{</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;<span class="preprocessor">#ifndef __QUANTUM_USE_DEFAULT_ALLOCATOR</span></div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;    <a class="code" href="../../d7/df5/structBloomberg_1_1quantum_1_1Allocator.html">Allocator&lt;ContextAllocator&gt;::instance</a>(AllocatorTraits::contextAllocSize()).dispose(<span class="keyword">reinterpret_cast&lt;</span><a class="code" href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Context&lt;int&gt;</a>*<span class="keyword">&gt;</span>(p));</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;    <span class="keyword">delete</span> p;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;}</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;}}</div><div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a315aa51f354c959bca0eaee24b90a26e"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a315aa51f354c959bca0eaee24b90a26e">Bloomberg::quantum::ICoroContext::finally</a></div><div class="ttdeci">ICoroContext&lt; OTHER_RET &gt;::Ptr finally(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a coroutine to run asynchronously. This coroutine is always guaranteed to run.</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a1efdbf7df3818aec9bc8fd98a5bfc640"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1efdbf7df3818aec9bc8fd98a5bfc640">Bloomberg::quantum::ICoroContext::getNumIoThreads</a></div><div class="ttdeci">int getNumIoThreads() const</div><div class="ttdoc">Returns the number of underlying IO threads as specified in the dispatcher constructor.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:218</div></div>
<div class="ttc" id="namespaceBloomberg_html"><div class="ttname"><a href="../../d6/db9/namespaceBloomberg.html">Bloomberg</a></div><div class="ttdef"><b>Definition:</b> quantum_buffer_impl.h:22</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a70e2d72600c412fdeca447b9b111991c"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a70e2d72600c412fdeca447b9b111991c">Bloomberg::quantum::Context::getCoroQueueIdRangeForAny</a></div><div class="ttdeci">const std::pair&lt; int, int &gt; &amp; getCoroQueueIdRangeForAny() const</div><div class="ttdoc">Gets the range [minQueueId, maxQueueId] of coroutine queueIds covered by IQueue::QueueId::Any by the ...</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:1027</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_a294434a555befbec5230f5ff03944878"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a294434a555befbec5230f5ff03944878">Bloomberg::quantum::CoroFuturePtr</a></div><div class="ttdeci">typename ICoroFuture&lt; T &gt;::Ptr CoroFuturePtr</div><div class="ttdef"><b>Definition:</b> quantum_icoro_future.h:72</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_aaf40c9f4c874571d103a2b40c2dbf554"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aaf40c9f4c874571d103a2b40c2dbf554">Bloomberg::quantum::IThreadContext::getNumIoThreads</a></div><div class="ttdeci">int getNumIoThreads() const</div><div class="ttdoc">Returns the number of underlying IO threads as specified in the dispatcher constructor.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:92</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_aef705383af39db02acc63c0dd8e4a321"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#aef705383af39db02acc63c0dd8e4a321">Bloomberg::quantum::Context::valid</a></div><div class="ttdeci">bool valid() const final</div><div class="ttdoc">Determines if the future object associated with this context has a valid shared state with the corres...</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:474</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1StlAllocator_html"><div class="ttname"><a href="../../d7/dd7/structBloomberg_1_1quantum_1_1StlAllocator.html">Bloomberg::quantum::StlAllocator</a></div><div class="ttdef"><b>Definition:</b> quantum_allocator.h:36</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_afdd6d891441a24d705b1c015beb9ad3c"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#afdd6d891441a24d705b1c015beb9ad3c">Bloomberg::quantum::PromisePtr</a></div><div class="ttdeci">typename Promise&lt; T &gt;::Ptr PromisePtr</div><div class="ttdef"><b>Definition:</b> quantum_promise.h:89</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_ab2530e5e0231aaba5a2f06315f713300"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ab2530e5e0231aaba5a2f06315f713300">Bloomberg::quantum::ICoroContext::end</a></div><div class="ttdeci">Ptr end()</div><div class="ttdoc">This is the last method in a continuation chain.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:287</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a43cf7ed9f70bc0123547b6baa6ec7c49"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a43cf7ed9f70bc0123547b6baa6ec7c49">Bloomberg::quantum::ICoroContext::getRef</a></div><div class="ttdeci">const NonBufferRetType&lt; V &gt; &amp; getRef(ICoroSync::Ptr sync) const</div><div class="ttdoc">Get a reference the future value associated with this context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:146</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a4563ab7eb43249f2ad8677935b0b002c"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a4563ab7eb43249f2ad8677935b0b002c">Bloomberg::quantum::ICoroContext::postFirst</a></div><div class="ttdeci">ICoroContext&lt; OTHER_RET &gt;::Ptr postFirst(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a coroutine to run asynchronously.</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_a8cf6f8fd7d169988428556468b333fe1"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a8cf6f8fd7d169988428556468b333fe1">Bloomberg::quantum::CoroContextPtr</a></div><div class="ttdeci">typename ICoroContext&lt; RET &gt;::Ptr CoroContextPtr</div><div class="ttdef"><b>Definition:</b> quantum_icoro_context.h:479</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1DispatcherCore_html"><div class="ttname"><a href="../../da/daa/classBloomberg_1_1quantum_1_1DispatcherCore.html">Bloomberg::quantum::DispatcherCore</a></div><div class="ttdoc">Class implementing the dispatching logic unto worker threads. Used for both coroutines and IO tasks.</div><div class="ttdef"><b>Definition:</b> quantum_dispatcher_core.h:45</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_afa8065d1270e5205c09720d1faf5307a"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#afa8065d1270e5205c09720d1faf5307a">Bloomberg::quantum::ICoroContext::mapReduceBatch</a></div><div class="ttdeci">ICoroContext&lt; std::map&lt; KEY, REDUCED_TYPE &gt; &gt;::Ptr mapReduceBatch(INPUT_IT first, INPUT_IT last, Functions::MapFunc&lt; KEY, MAPPED_TYPE, INPUT_IT &gt; mapper, Functions::ReduceFunc&lt; KEY, MAPPED_TYPE, REDUCED_TYPE &gt; reducer)</div><div class="ttdoc">This version of mapReduce() runs both the mapper and the reducer functions in batches for improved pe...</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1Allocator_html"><div class="ttname"><a href="../../d7/df5/structBloomberg_1_1quantum_1_1Allocator.html">Bloomberg::quantum::Allocator</a></div><div class="ttdef"><b>Definition:</b> quantum_allocator.h:54</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a5456b3de0627bee9695946acf745e195"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a5456b3de0627bee9695946acf745e195">Bloomberg::quantum::IThreadContext::getRefAt</a></div><div class="ttdeci">const NonBufferRetType&lt; OTHER_RET &gt; &amp; getRefAt(int num) const</div><div class="ttdoc">Get a reference to the future value from the 'num-th' continuation context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:52</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a2eed7d5de4d43b5c5c214cb38b239acd"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a2eed7d5de4d43b5c5c214cb38b239acd">Bloomberg::quantum::IThreadContext::getRef</a></div><div class="ttdeci">const NonBufferRetType&lt; V &gt; &amp; getRef() const</div><div class="ttdoc">Get a reference the future value associated with this context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:38</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a0b7724a925c43a5a9661e90f7f331651"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a0b7724a925c43a5a9661e90f7f331651">Bloomberg::quantum::IThreadContext::Ptr</a></div><div class="ttdeci">std::shared_ptr&lt; IThreadContext&lt; RET &gt; &gt; Ptr</div><div class="ttdef"><b>Definition:</b> quantum_ithread_context.h:40</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a0fadac955b2b32d87d1b8e505dce39c3"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a0fadac955b2b32d87d1b8e505dce39c3">Bloomberg::quantum::ICoroContext::getNumCoroutineThreads</a></div><div class="ttdeci">int getNumCoroutineThreads() const</div><div class="ttdoc">Returns the number of underlying coroutine threads as specified in the dispatcher constructor....</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:212</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroSync_html_a109b2c4b7d70d53d48bb640a9d849b29"><div class="ttname"><a href="../../d3/d63/structBloomberg_1_1quantum_1_1ICoroSync.html#a109b2c4b7d70d53d48bb640a9d849b29">Bloomberg::quantum::ICoroSync::Ptr</a></div><div class="ttdeci">std::shared_ptr&lt; ICoroSync &gt; Ptr</div><div class="ttdef"><b>Definition:</b> quantum_icoro_sync.h:36</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ITask_html_ae01baba509e1529f4f89e01d9c19fa14"><div class="ttname"><a href="../../df/daf/structBloomberg_1_1quantum_1_1ITask.html#ae01baba509e1529f4f89e01d9c19fa14">Bloomberg::quantum::ITask::Type</a></div><div class="ttdeci">Type</div><div class="ttdef"><b>Definition:</b> quantum_itask.h:37</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Promise_html_a2cba4d0efb0eb09be81f033b5550418d"><div class="ttname"><a href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html#a2cba4d0efb0eb09be81f033b5550418d">Bloomberg::quantum::Promise::deleter</a></div><div class="ttdeci">static void deleter(Promise&lt; T &gt; *p)</div><div class="ttdef"><b>Definition:</b> quantum_promise_impl.h:207</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Promise_html"><div class="ttname"><a href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html">Bloomberg::quantum::Promise</a></div><div class="ttdoc">Class representing a promised value.</div><div class="ttdef"><b>Definition:</b> quantum_icoro_promise.h:77</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1Functions_html_a510a24630512ab725361c0250bbf882e"><div class="ttname"><a href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a510a24630512ab725361c0250bbf882e">Bloomberg::quantum::Functions::ForEachFunc</a></div><div class="ttdeci">std::function&lt; RET(const typename std::iterator_traits&lt; INPUT_IT &gt;::value_type &amp;)&gt; ForEachFunc</div><div class="ttdef"><b>Definition:</b> quantum_functions.h:34</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a9c60ca5034b9d1b19dd7279f3476bbec"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a9c60ca5034b9d1b19dd7279f3476bbec">Bloomberg::quantum::ICoroContext::getCoroQueueIdRangeForAny</a></div><div class="ttdeci">const std::pair&lt; int, int &gt; &amp; getCoroQueueIdRangeForAny() const</div><div class="ttdoc">Gets the range [minQueueId, maxQueueId] of coroutine queueIds covered by IQueue::QueueId::Any by the ...</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:224</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_aafa32c808db9c73262f5336b03f2055a"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#aafa32c808db9c73262f5336b03f2055a">Bloomberg::quantum::ICoroContext::postAsyncIo</a></div><div class="ttdeci">CoroFuturePtr&lt; OTHER_RET &gt; postAsyncIo(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts an IO method to run asynchronously on the IO thread pool.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:295</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1Functions_html_af8fdee23da6d53ce304c908981315528"><div class="ttname"><a href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#af8fdee23da6d53ce304c908981315528">Bloomberg::quantum::Functions::MapFunc</a></div><div class="ttdeci">std::function&lt; std::vector&lt; std::pair&lt; KEY, MAPPED_TYPE &gt; &gt;(const typename std::iterator_traits&lt; INPUT_IT &gt;::value_type &amp;)&gt; MapFunc</div><div class="ttdef"><b>Definition:</b> quantum_functions.h:37</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Task_html"><div class="ttname"><a href="../../d0/d90/classBloomberg_1_1quantum_1_1Task.html">Bloomberg::quantum::Task</a></div><div class="ttdoc">Runnable object representing a coroutine.</div><div class="ttdef"><b>Definition:</b> quantum_task.h:40</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_aef2bff661268949c9c598e0674ff7254"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aef2bff661268949c9c598e0674ff7254">Bloomberg::quantum::IThreadContext::closeBuffer</a></div><div class="ttdeci">int closeBuffer()</div><div class="ttdoc">Close a promise buffer.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:80</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a93fbe0e7fa77b4b98f35ee2935dfaa83"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a93fbe0e7fa77b4b98f35ee2935dfaa83">Bloomberg::quantum::Context::Ptr</a></div><div class="ttdeci">std::shared_ptr&lt; Context&lt; RET &gt; &gt; Ptr</div><div class="ttdef"><b>Definition:</b> quantum_context.h:47</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_a0a7dd2b5f475bbecb11bfa87fcc251c5"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a0a7dd2b5f475bbecb11bfa87fcc251c5">Bloomberg::quantum::NonBufferRetType</a></div><div class="ttdeci">std::enable_if_t&lt;!Traits::IsBuffer&lt; T &gt;::value, typename Traits::IsBuffer&lt; T &gt;::Type &gt; NonBufferRetType</div><div class="ttdef"><b>Definition:</b> quantum_traits.h:95</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a87a132655875ac6f07d5242e24d80a8d"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a87a132655875ac6f07d5242e24d80a8d">Bloomberg::quantum::ICoroContext::getAt</a></div><div class="ttdeci">NonBufferRetType&lt; OTHER_RET &gt; getAt(int num, ICoroSync::Ptr sync)</div><div class="ttdoc">Get the future value from the 'num-th' continuation context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:169</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a42ea867e65bc7e31a4373dc2142cef75"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a42ea867e65bc7e31a4373dc2142cef75">Bloomberg::quantum::IThreadContext::getCoroQueueIdRangeForAny</a></div><div class="ttdeci">const std::pair&lt; int, int &gt; &amp; getCoroQueueIdRangeForAny() const</div><div class="ttdoc">Gets the range [minQueueId, maxQueueId] of coroutine queueIds covered by IQueue::QueueId::Any by the ...</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:98</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ITask_html_a6c5b8216547b11f3f0e0e6bc7d20956d"><div class="ttname"><a href="../../df/daf/structBloomberg_1_1quantum_1_1ITask.html#a6c5b8216547b11f3f0e0e6bc7d20956d">Bloomberg::quantum::ITask::Ptr</a></div><div class="ttdeci">std::shared_ptr&lt; ITask &gt; Ptr</div><div class="ttdef"><b>Definition:</b> quantum_itask.h:34</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_a97424bb463a112d6dd7606741b20e484"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a97424bb463a112d6dd7606741b20e484">Bloomberg::quantum::ContextPtr</a></div><div class="ttdeci">typename Context&lt; RET &gt;::Ptr ContextPtr</div><div class="ttdef"><b>Definition:</b> quantum_context.h:307</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_affbdb2bb8e1292cddd90684e4fa6d1f4"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#affbdb2bb8e1292cddd90684e4fa6d1f4">Bloomberg::quantum::IThreadContext::finally</a></div><div class="ttdeci">IThreadContext&lt; OTHER_RET &gt;::Ptr finally(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a function to run asynchronously. This function is always guaranteed to run.</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1StackAllocator_html"><div class="ttname"><a href="../../d0/d75/structBloomberg_1_1quantum_1_1StackAllocator.html">Bloomberg::quantum::StackAllocator</a></div><div class="ttdoc">Provides a stack-based object pool to the underlying ContiguousPoolManager. The default buffer size i...</div><div class="ttdef"><b>Definition:</b> quantum_stack_allocator.h:34</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html">Bloomberg::quantum::Context</a></div><div class="ttdoc">Concrete class representing a coroutine or a thread context.</div><div class="ttdef"><b>Definition:</b> quantum_icoro_context.h:29</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a8c969eafd7cdd1b694c33194a9dd7c09"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a8c969eafd7cdd1b694c33194a9dd7c09">Bloomberg::quantum::IThreadContext::get</a></div><div class="ttdeci">NonBufferRetType&lt; V &gt; get()</div><div class="ttdoc">Get the future value associated with this context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:31</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a5855eee0ab54a2d606cdc96196816a74"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a5855eee0ab54a2d606cdc96196816a74">Bloomberg::quantum::Context::getNumIoThreads</a></div><div class="ttdeci">int getNumIoThreads() const</div><div class="ttdoc">Returns the number of underlying IO threads as specified in the dispatcher constructor.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:1021</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a7a6bbcc70d8d886864351513680ede87"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a7a6bbcc70d8d886864351513680ede87">Bloomberg::quantum::IThreadContext::then</a></div><div class="ttdeci">IThreadContext&lt; OTHER_RET &gt;::Ptr then(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a function to run asynchronously.</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a8bac8f4101d8469756bb27b1c0b7f9dc"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a8bac8f4101d8469756bb27b1c0b7f9dc">Bloomberg::quantum::Context::terminate</a></div><div class="ttdeci">void terminate() final</div><div class="ttdoc">Terminates the object.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:456</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_abc0fd314e1dbc93055a0107c390b8af9"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#abc0fd314e1dbc93055a0107c390b8af9">Bloomberg::quantum::ICoroContext::onError</a></div><div class="ttdeci">ICoroContext&lt; OTHER_RET &gt;::Ptr onError(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a coroutine to run asynchronously. This is the error handler for a continuation chain and acts ...</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a7f2c171bda51b08ef7bf56f0d4aa5a90"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7f2c171bda51b08ef7bf56f0d4aa5a90">Bloomberg::quantum::ICoroContext::closeBuffer</a></div><div class="ttdeci">int closeBuffer()</div><div class="ttdoc">Close a promise buffer.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:206</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a876d52748c66869620cdb9753783a86e"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a876d52748c66869620cdb9753783a86e">Bloomberg::quantum::ICoroContext::mapReduce</a></div><div class="ttdeci">ICoroContext&lt; std::map&lt; KEY, REDUCED_TYPE &gt; &gt;::Ptr mapReduce(INPUT_IT first, INPUT_IT last, Functions::MapFunc&lt; KEY, MAPPED_TYPE, INPUT_IT &gt; mapper, Functions::ReduceFunc&lt; KEY, MAPPED_TYPE, REDUCED_TYPE &gt; reducer)</div><div class="ttdoc">Implementation of map-reduce functionality.</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Task_html_a2d6e0bcef2e9f07d966c9734f92f4969"><div class="ttname"><a href="../../d0/d90/classBloomberg_1_1quantum_1_1Task.html#a2d6e0bcef2e9f07d966c9734f92f4969">Bloomberg::quantum::Task::Ptr</a></div><div class="ttdeci">std::shared_ptr&lt; Task &gt; Ptr</div><div class="ttdef"><b>Definition:</b> quantum_task.h:44</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_ab6e481262f106b0ed5fd5c0b86978c03"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#ab6e481262f106b0ed5fd5c0b86978c03">Bloomberg::quantum::IThreadContext::push</a></div><div class="ttdeci">void push(V &amp;&amp;value)</div><div class="ttdoc">Push a single value into the promise buffer.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:66</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a1132ca05b44a667a1e3b1633e02a1b23"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a1132ca05b44a667a1e3b1633e02a1b23">Bloomberg::quantum::ICoroContext::forEach</a></div><div class="ttdeci">ICoroContext&lt; std::vector&lt; OTHER_RET &gt; &gt;::Ptr forEach(INPUT_IT first, INPUT_IT last, Functions::ForEachFunc&lt; OTHER_RET, INPUT_IT &gt; func)</div><div class="ttdoc">Applies the given unary function to all the elements in the range [first,last). This function runs in...</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a330754e60be65d5ee5f73793c7f86f69"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a330754e60be65d5ee5f73793c7f86f69">Bloomberg::quantum::ICoroContext::get</a></div><div class="ttdeci">NonBufferRetType&lt; V &gt; get(ICoroSync::Ptr sync)</div><div class="ttdoc">Get the future value associated with this context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:139</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a3c64853ee6c868f4e83668f17d4efd95"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a3c64853ee6c868f4e83668f17d4efd95">Bloomberg::quantum::ICoroContext::getRefAt</a></div><div class="ttdeci">const NonBufferRetType&lt; OTHER_RET &gt; &amp; getRefAt(int num, ICoroSync::Ptr sync) const</div><div class="ttdoc">Get a reference to the future value from the 'num-th' continuation context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:176</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a66b2fe051e1b72e6a045cb0a3e57b9d2"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a66b2fe051e1b72e6a045cb0a3e57b9d2">Bloomberg::quantum::Context::getNumCoroutineThreads</a></div><div class="ttdeci">int getNumCoroutineThreads() const</div><div class="ttdoc">Returns the number of underlying coroutine threads as specified in the dispatcher constructor....</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:1015</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1Traits_html_a2730a4e218f1af1a4e3f64e80ed7bbfc"><div class="ttname"><a href="../../d6/d86/structBloomberg_1_1quantum_1_1Traits.html#a2730a4e218f1af1a4e3f64e80ed7bbfc">Bloomberg::quantum::Traits::Yield</a></div><div class="ttdeci">typename BoostCoro::pull_type Yield</div><div class="ttdef"><b>Definition:</b> quantum_traits.h:58</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_a4206774a667bbdbc8c8cc1fd905e051c"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a4206774a667bbdbc8c8cc1fd905e051c">Bloomberg::quantum::ThrowFutureException</a></div><div class="ttdeci">void ThrowFutureException(FutureState state)</div><div class="ttdef"><b>Definition:</b> quantum_future_state.h:130</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a8d04a093d07bf66ead58603592295352"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a8d04a093d07bf66ead58603592295352">Bloomberg::quantum::IThreadContext::getAt</a></div><div class="ttdeci">NonBufferRetType&lt; OTHER_RET &gt; getAt(int num)</div><div class="ttdoc">Get the future value from the 'num-th' continuation context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:45</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a7aeb2b66b620b208cde57129a9293ec3"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7aeb2b66b620b208cde57129a9293ec3">Bloomberg::quantum::ICoroContext::getPrevRef</a></div><div class="ttdeci">const NonBufferRetType&lt; OTHER_RET &gt; &amp; getPrevRef()</div><div class="ttdoc">Get a reference to future value associated with the previous coroutine context in the continuation ch...</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:161</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1Functions_html_a4f8eb1de73c9ec3661fee4242f1a2a87"><div class="ttname"><a href="../../d0/d25/structBloomberg_1_1quantum_1_1Functions.html#a4f8eb1de73c9ec3661fee4242f1a2a87">Bloomberg::quantum::Functions::ReduceFunc</a></div><div class="ttdeci">std::function&lt; std::pair&lt; KEY, REDUCED_TYPE &gt;(std::pair&lt; KEY, std::vector&lt; MAPPED_TYPE &gt; &gt; &amp;&amp;)&gt; ReduceFunc</div><div class="ttdef"><b>Definition:</b> quantum_functions.h:40</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a084c691c4873a2dd206b05ecd3e5dd34"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a084c691c4873a2dd206b05ecd3e5dd34">Bloomberg::quantum::Context::wait</a></div><div class="ttdeci">void wait() const final</div><div class="ttdoc">Waits for the future associated with this context to be ready.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:928</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a984eea6da10575adfba1a38d3b09ebd7"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a984eea6da10575adfba1a38d3b09ebd7">Bloomberg::quantum::ICoroContext::set</a></div><div class="ttdeci">int set(V &amp;&amp;value)</div><div class="ttdoc">Set the promised value associated with this context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:183</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a5612c3e719e8fe2104ada21a10767b4a"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a5612c3e719e8fe2104ada21a10767b4a">Bloomberg::quantum::IThreadContext::set</a></div><div class="ttdeci">int set(V &amp;&amp;value)</div><div class="ttdoc">Set the promised value associated with this context.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:59</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_afda4bb817480a24960e407f6e977ed28"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#afda4bb817480a24960e407f6e977ed28">Bloomberg::quantum::ICoroContext::Ptr</a></div><div class="ttdeci">std::shared_ptr&lt; ICoroContext&lt; RET &gt; &gt; Ptr</div><div class="ttdef"><b>Definition:</b> quantum_icoro_context.h:41</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a5a71ccef08af22fdde662e7df560dccb"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a5a71ccef08af22fdde662e7df560dccb">Bloomberg::quantum::Context::setException</a></div><div class="ttdeci">int setException(std::exception_ptr ex) final</div><div class="ttdoc">Set an exception in the promise associated with the current IThreadContext or ICoroContext.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:480</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1HeapAllocator_html"><div class="ttname"><a href="../../d2/da6/structBloomberg_1_1quantum_1_1HeapAllocator.html">Bloomberg::quantum::HeapAllocator</a></div><div class="ttdoc">Provides a heap-based object pool to the underlying ContiguousPoolManager. The default buffer size is...</div><div class="ttdef"><b>Definition:</b> quantum_heap_allocator.h:33</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_aa911856faa7b71962984a101cfb59cf0"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#aa911856faa7b71962984a101cfb59cf0">Bloomberg::quantum::IThreadContext::onError</a></div><div class="ttdeci">IThreadContext&lt; OTHER_RET &gt;::Ptr onError(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a function to run asynchronously. This is the error handler for a continuation chain and acts a...</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a18a76d5a8b8d68567bf706f468d69ea2"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a18a76d5a8b8d68567bf706f468d69ea2">Bloomberg::quantum::ICoroContext::push</a></div><div class="ttdeci">void push(V &amp;&amp;value)</div><div class="ttdoc">Push a single value into the promise buffer.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:191</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_a3e3f89ff8206c0514976b423cb7199cd"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#a3e3f89ff8206c0514976b423cb7199cd">Bloomberg::quantum::BufferRetType</a></div><div class="ttdeci">std::enable_if_t&lt; Traits::IsBuffer&lt; T &gt;::value, typename Traits::IsBuffer&lt; T &gt;::Type &gt; BufferRetType</div><div class="ttdef"><b>Definition:</b> quantum_traits.h:93</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a141e79103170cb9cb0fb0197d8df61e5"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a141e79103170cb9cb0fb0197d8df61e5">Bloomberg::quantum::ICoroContext::getPrev</a></div><div class="ttdeci">NonBufferRetType&lt; OTHER_RET &gt; getPrev()</div><div class="ttdoc">Get the future value associated with the previous coroutine context in the continuation chain.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:153</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a218dc6b764b01a685e37840a796fe0eb"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a218dc6b764b01a685e37840a796fe0eb">Bloomberg::quantum::ICoroContext::pull</a></div><div class="ttdeci">BufferRetType&lt; V &gt; pull(ICoroSync::Ptr sync, bool &amp;isBufferClosed)</div><div class="ttdoc">Pull a single value from the future buffer.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:199</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a3472f64cc9dd65b058f8fcbabc4e3d02"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a3472f64cc9dd65b058f8fcbabc4e3d02">Bloomberg::quantum::Context::waitFor</a></div><div class="ttdeci">std::future_status waitFor(std::chrono::milliseconds timeMs) const final</div><div class="ttdoc">Waits for the future associated with this context to be ready for a maximum of 'timeMs' milliseconds.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:934</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a7e16a0f4dda08ea619bbd3997f31a51e"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a7e16a0f4dda08ea619bbd3997f31a51e">Bloomberg::quantum::ICoroContext::post</a></div><div class="ttdeci">ICoroContext&lt; OTHER_RET &gt;::Ptr post(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Post a coroutine to run asynchronously.</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_ab7f82d2d74ac1840dbe1332898a86796"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#ab7f82d2d74ac1840dbe1332898a86796">Bloomberg::quantum::ICoroContext::forEachBatch</a></div><div class="ttdeci">ICoroContext&lt; std::vector&lt; std::vector&lt; OTHER_RET &gt; &gt; &gt;::Ptr forEachBatch(INPUT_IT first, INPUT_IT last, Functions::ForEachFunc&lt; OTHER_RET, INPUT_IT &gt; func)</div><div class="ttdoc">Applies the given unary function to all the elements in the range [first,last). This function runs se...</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a3a0a83b7941b8b0cf2c0a9ce6ec0f7ab"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a3a0a83b7941b8b0cf2c0a9ce6ec0f7ab">Bloomberg::quantum::IThreadContext::end</a></div><div class="ttdeci">Ptr end()</div><div class="ttdoc">This is the last method in a continuation chain.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:129</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a974f72467140b4d4047d8b76d2011703"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a974f72467140b4d4047d8b76d2011703">Bloomberg::quantum::IThreadContext::getNumCoroutineThreads</a></div><div class="ttdeci">int getNumCoroutineThreads() const</div><div class="ttdoc">Returns the number of underlying coroutine threads as specified in the dispatcher constructor....</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:86</div></div>
<div class="ttc" id="namespaceBloomberg_1_1quantum_html_aa26dcdfb6c3930c1cd2b4000d8711f4c"><div class="ttname"><a href="../../dc/d48/namespaceBloomberg_1_1quantum.html#aa26dcdfb6c3930c1cd2b4000d8711f4c">Bloomberg::quantum::ThreadContextPtr</a></div><div class="ttdeci">typename IThreadContext&lt; RET &gt;::Ptr ThreadContextPtr</div><div class="ttdef"><b>Definition:</b> quantum_ithread_context.h:242</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1ICoroContext_html_a122f96fbe956dcc2205564b1e953d8fc"><div class="ttname"><a href="../../d5/dd1/structBloomberg_1_1quantum_1_1ICoroContext.html#a122f96fbe956dcc2205564b1e953d8fc">Bloomberg::quantum::ICoroContext::then</a></div><div class="ttdeci">ICoroContext&lt; OTHER_RET &gt;::Ptr then(FUNC &amp;&amp;func, ARGS &amp;&amp;... args)</div><div class="ttdoc">Posts a coroutine to run asynchronously.</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Context_html_a655724ff396688037fb9bef66afc3f4e"><div class="ttname"><a href="../../d8/df7/classBloomberg_1_1quantum_1_1Context.html#a655724ff396688037fb9bef66afc3f4e">Bloomberg::quantum::Context::Context</a></div><div class="ttdeci">friend class Context</div><div class="ttdef"><b>Definition:</b> quantum_context.h:44</div></div>
<div class="ttc" id="structBloomberg_1_1quantum_1_1IThreadContext_html_a65ced94956cdfff4ad094897b14f8234"><div class="ttname"><a href="../../da/de3/structBloomberg_1_1quantum_1_1IThreadContext.html#a65ced94956cdfff4ad094897b14f8234">Bloomberg::quantum::IThreadContext::pull</a></div><div class="ttdeci">BufferRetType&lt; V &gt; pull(bool &amp;isBufferClosed)</div><div class="ttdoc">Pull a single value from the future buffer.</div><div class="ttdef"><b>Definition:</b> quantum_context_impl.h:73</div></div>
<div class="ttc" id="classBloomberg_1_1quantum_1_1Promise_html_a774002dc514111f16e550f584dd32f95"><div class="ttname"><a href="../../d1/d15/classBloomberg_1_1quantum_1_1Promise.html#a774002dc514111f16e550f584dd32f95">Bloomberg::quantum::Promise::getICoroFuture</a></div><div class="ttdeci">CoroFuturePtr&lt; T &gt; getICoroFuture() const</div><div class="ttdoc">Get the associated coroutine future.</div><div class="ttdef"><b>Definition:</b> quantum_promise_impl.h:164</div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="../../dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a class="el" href="../../dir_3808e3f8fe545b07b1d2715928fb0eea.html">impl</a></li><li class="navelem"><b>quantum_context_impl.h</b></li>
    <li class="footer">Generated by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="../../doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
  </ul>
</div>
</body>
</html>
